home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Mac Game Programming Gurus / TricksOfTheMacGameProgrammingGurus.iso / More Source / Libraries / SAT 2.3b4 / Demo ƒ / SAT Invaders demo ƒ / sMissile.p < prev    next >
Text File  |  1994-08-21  |  2KB  |  75 lines

  1. {===============================================}
  2. {================= Missile sprite unit ================}
  3. {===============================================}
  4.  
  5. { Example file for Ingemars Sprite Animation Toolkit. }
  6. { © Ingemar Ragnemalm 1992 }
  7. { See doc files for legal terms for using this code. }
  8.  
  9. unit sMissile;
  10.  
  11. { Sprite unit. A sprite unit should include the following routines:}
  12. { Init-procedure, that initializes private bitmaps}
  13. { Setup-procedure, that sets variables other than the standard ones set by MakeSprite }
  14. { Handle-procedure, to be called once per iteration until the sprite dies }
  15. { Hittask-procedure (optional), for advanced collission handling. }
  16.  
  17. { Missile object for the SATInvaders sample game. }
  18.  
  19. interface
  20.  
  21.     uses
  22.         SAT, SoundConst, GameGlobals;
  23.  
  24.     var
  25.         missilecount: integer; { Exported since it has to be reset by SetupLevel }
  26.  
  27.     procedure InitMissile;
  28.     procedure SetupMissile (sp: SpritePtr);
  29.     procedure HandleMissile (me: SpritePtr);
  30.  
  31. implementation
  32.  
  33.     const
  34.         missileSpeed = 10;
  35.         maxMissiles = 5;
  36.  
  37.     var
  38.         missileFace: FacePtr;
  39.  
  40.     procedure InitMissile;
  41.     begin
  42.         missileFace := SATGetFace(136);
  43.     end;
  44.  
  45.     procedure SetupMissile (sp: SpritePtr);
  46.     begin
  47.         sp^.face := missileFace;
  48.         SetRect(sp^.hotRect, 3, 0, 13, 17); {How big are we?}
  49.  
  50.         if missilecount >= maxMissiles then
  51.             sp^.task := nil { If too many, remove us immediately }
  52.         else
  53.             missilecount := succ(missilecount); {One missile more}
  54.         sp^.task := @HandleMissile;
  55.     end;
  56.  
  57.     procedure HandleMissile (me: SpritePtr);
  58.     begin
  59.         if me^.kind <> -1 then {Hit something}
  60.             begin
  61.                 me^.task := nil; {Remove us}
  62.                 missilecount := pred(missilecount); {One missile less}
  63.                 SATSoundPlay(dunkH, 1, false); {Play a sound (with rather low priority) }
  64.             end;
  65.  
  66.         me^.position.v := me^.position.v + missileSpeed; {Move down}
  67.  
  68.         if me^.position.v > gSAT.offSizeV then {Outside - remove}
  69.             begin
  70.                 me^.task := nil;
  71.                 missilecount := pred(missilecount);
  72.             end;
  73.     end;
  74.  
  75. end.